Spring Cloud Gateway夺命连环十问?
全部标签《我想进大厂》之Spring夺命连环10问Java基础,必须全对! 1.说说Spring里用到了哪些设计模式?单例模式:Spring中的Bean默认情况下都是单例的。无需多说。工厂模式:工厂模式主要是通过BeanFactory和ApplicationContext来生产Bean对象。代理模式:最常见的AOP的实现方式就是通过代理来实现,Spring主要是使用JDK动态代理和CGLIB代理。模板方法模式:主要是一些对数据库操作的类用到,比如JdbcTemplate、JpaTemplate,因为查询数据库的建立连接、执行查询、关闭连接几个过程,非常适用于模板方法。2.谈谈你对IOC和AOP的理解?
1.数据库读写分离的目的是什么?通常业务系统是读多写少,读写分离是将对数据库的读写操作分散到不同的节点上,能够小幅提升写性能,大幅提升读性能。通常采用数据库一主多从的方式,主库可以读写,从库只读。2.读写分离会带来什么问题?如何解决?主库和从库的数据存在延迟。比如写完主库之后,主库的数据同步到从库是需要时间的,这个时间差就导致了主库和从库的数据不一致性问题。解决办法是在不能忍受延迟的场景强制读主库。3.MySQL主从复制的原理清楚吗?主库将数据库中数据的变化写入到binlog从库连接主库。从库会创建一个I/O线程向主库请求更新的binlog。主库会创建一个binlogdump线程来发送binl
1.数据库读写分离的目的是什么?通常业务系统是读多写少,读写分离是将对数据库的读写操作分散到不同的节点上,能够小幅提升写性能,大幅提升读性能。通常采用数据库一主多从的方式,主库可以读写,从库只读。2.读写分离会带来什么问题?如何解决?主库和从库的数据存在延迟。比如写完主库之后,主库的数据同步到从库是需要时间的,这个时间差就导致了主库和从库的数据不一致性问题。解决办法是在不能忍受延迟的场景强制读主库。3.MySQL主从复制的原理清楚吗?主库将数据库中数据的变化写入到binlog从库连接主库。从库会创建一个I/O线程向主库请求更新的binlog。主库会创建一个binlogdump线程来发送binl
一、谈一谈你对TCP/IP四层模型,OSI七层模型的理解? 为了增强通用性和兼容性,计算机网络都被设计成层次机构,每一层都遵守一定的规则。 因此有了OSI这样一个抽象的网络通信参考模型,按照这个标准使计算机网络系统可以互相连接。 物理层:通过网线、光缆等这种物理方式将电脑连接起来。传递的数据是比特流,0101010100。 数据链路层:首先,把比特流封装成数据帧的格式,对0、1进行分组。电脑连接起来之后,数据都经过网卡来传输,而网卡上定义了全世界唯一的MAC地址。然后再通过广播的形式向局域网内所有电脑发送数据,再根据数据中MAC地址和自身对比判断是否是发给自己的。 网络层:广播的形式太低效
一、谈一谈你对TCP/IP四层模型,OSI七层模型的理解? 为了增强通用性和兼容性,计算机网络都被设计成层次机构,每一层都遵守一定的规则。 因此有了OSI这样一个抽象的网络通信参考模型,按照这个标准使计算机网络系统可以互相连接。 物理层:通过网线、光缆等这种物理方式将电脑连接起来。传递的数据是比特流,0101010100。 数据链路层:首先,把比特流封装成数据帧的格式,对0、1进行分组。电脑连接起来之后,数据都经过网卡来传输,而网卡上定义了全世界唯一的MAC地址。然后再通过广播的形式向局域网内所有电脑发送数据,再根据数据中MAC地址和自身对比判断是否是发给自己的。 网络层:广播的形式太低效
1.你们为什么使用mq?具体的使用场景是什么? mq的作用很简单,削峰填谷。以电商交易下单的场景来说,正向交易的过程可能涉及到创建订单、扣减库存、扣减活动预算、扣减积分等等。每个接口的耗时如果是100ms,那么理论上整个下单的链路就需要耗费400ms,这个时间显然是太长了。 如果这些操作全部同步处理的话,首先调用链路太长影响接口性能,其次分布式事务的问题很难处理,这时候像扣减预算和积分这种对实时一致性要求没有那么高的请求,完全就可以通过mq异步的方式去处理了。同时,考虑到异步带来的不一致的问题,我们可以通过job去重试保证接口调用成功,而且一般公司都会有核对的平台,比如下单成功但是未
1.你们为什么使用mq?具体的使用场景是什么? mq的作用很简单,削峰填谷。以电商交易下单的场景来说,正向交易的过程可能涉及到创建订单、扣减库存、扣减活动预算、扣减积分等等。每个接口的耗时如果是100ms,那么理论上整个下单的链路就需要耗费400ms,这个时间显然是太长了。 如果这些操作全部同步处理的话,首先调用链路太长影响接口性能,其次分布式事务的问题很难处理,这时候像扣减预算和积分这种对实时一致性要求没有那么高的请求,完全就可以通过mq异步的方式去处理了。同时,考虑到异步带来的不一致的问题,我们可以通过job去重试保证接口调用成功,而且一般公司都会有核对的平台,比如下单成功但是未
1.说说Redis基本数据类型有哪些吧 1.字符串:redis没有直接使用C语言传统的字符串表示,而是自己实现的叫做简单动态字符串SDS的抽象类型。C语言的字符串不记录自身的长度信息,而SDS则保存了长度信息,这样将获取字符串长度的时间由O(N)降低到了O(1),同时可以避免缓冲区溢出和减少修改字符串长度时所需的内存重分配次数。 2.链表linkedlist:redis链表是一个双向无环链表结构,很多发布订阅、慢查询、监视器功能都是使用到了链表来实现,每个链表的节点由一个listNode结构来表示,每个节点都有指向前置节点和后置节点的指针,同时表头节点的前置和后置节点都指向NULL。 3.
1.说说Redis基本数据类型有哪些吧 1.字符串:redis没有直接使用C语言传统的字符串表示,而是自己实现的叫做简单动态字符串SDS的抽象类型。C语言的字符串不记录自身的长度信息,而SDS则保存了长度信息,这样将获取字符串长度的时间由O(N)降低到了O(1),同时可以避免缓冲区溢出和减少修改字符串长度时所需的内存重分配次数。 2.链表linkedlist:redis链表是一个双向无环链表结构,很多发布订阅、慢查询、监视器功能都是使用到了链表来实现,每个链表的节点由一个listNode结构来表示,每个节点都有指向前置节点和后置节点的指针,同时表头节点的前置和后置节点都指向NULL。 3.
1.如何保证缓存与数据库的数据一致性?要保持数据强一致性,只能将读请求和写请求串行化,在同一个内存队列里执行。但是串行化会导致系统的吞吐量大幅度降低,多用几倍的机器去支撑线上的请求。2.如果只要数据最终一致性,该怎么做呢?缓存设置过期时间。读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。更新数据的时候,先更新数据库,然后再删除缓存。3.为什么是删除缓存,而不是更新缓存?删除比更新更快捷。比如有些缓存值是由多个数据计算出来的,如果计算比较耗时,在高并发下,更新缓存的方式增加了读缓存不一致的概率。有些缓存是冷数据,删除缓存等于是将更新缓存延迟到了读请求的时刻。4